n1=20:n2=40:n3=165 SAVE "chesstutor",b MENU 1,0,1,"checkmate" MENU 1,1,1,"mate1" MENU 1,2,1,"mate2a" MENU 1,3,1,"mate2b" MENU 1,4,1,"mate3a" MENU 1,5,1,"mate3b" MENU 2,0,1,"unstoppablemate MENU 2,1,1,"unstopmate2" MENU 2,2,1,"unstopmate3" MENU 3,0,1,"winmaterial" MENU 3,1,1,"winmat2a" MENU 3,2,1,"winmat2b" MENU 3,3,1,"winmat3a" MENU 3,4,1,"winmat3b" MENU 4,0,1,"queening MENU 4,1,1,"queening2 MENU 4,2,1,"queening3 MENU 5,0,1,"other" MENU 5,1,1,"mate4a" MENU 5,2,1,"mate4b" MENU 5,3,1,"draw" MENU 5,4,1,"1mover" MENU 6,0,1,"instructions" MENU 6,1,1,"instructions" ON MENU GOSUB menuselect MENU ON ON BREAK GOSUB break1 PAINT(1,1),1 COLOR 2,1 LOCATE 7,21 PRINT "THIS IS A SHAREWARE PROGRAM PRINT SPC(20) PRINT "GIVE A COPY TO YOUR FRIENDS! PRINT PRINT SPC(20) PRINT "IF YOU ENJOYED IT, SEND $20 PRINT SPC(20) PRINT "AND ANY QUESTIONS OR SUGGESTIONS PRINT SPC(20) PRINT " BY CHEQUE OR MONEY ORDER TO W.JORDAN PRINT SPC(20) PRINT "P.O.BOX 136, FITZROY, VIC 3065 PRINT SPC(20) PRINT " (AUSTRALIA) PRINT SPC(20) PRINT "PH: (03)417-3521 PRINT PRINT SPC(20) PRINT "Choose questions from pull-down menu PRINT PRINT SPC(20) PRINT "To exit program, click gadget PRINT SPC(20) PRINT "In top left corner ms=1 waitm: GOTO waitm menuselect: men=MENU(0):men1=MENU(1) IF men=1 THEN IF men1=1 THEN nam$="checkmate1":move=1 IF men1=2 THEN nam$="mate2a":move=1.5 IF men1=3 THEN nam$="mate2b":move=1.5 IF men1=4 THEN nam$="mate3a":move=2 IF men1=5 THEN nam$="mate3b":move=2 GOTO mouse1 END IF IF men=2 THEN IF men1=1 THEN nam$="unstop2":move=1.5 IF men1=2 THEN nam$="unstop3":move=2 GOTO mouse1 END IF IF men=3 THEN IF men1=1 THEN nam$="winmaterial2":move=1.5 IF men1=2 THEN nam$="hennig":move=1.5 IF men1=3 THEN nam$="winmaterial3a":move=2 IF men1=4 THEN nam$="winmaterial3b":move=2 GOTO mouse1 END IF IF men=4 THEN IF men1=1 THEN nam$="queening2":move=1.5 IF men1=2 THEN nam$="queening3":move=2 GOTO mouse1 END IF IF men=5 THEN IF men1=1 THEN nam$="4movera":move=2.5 IF men1=2 THEN nam$="4moverb":move=2.5 IF men1=3 THEN nam$="draw":move=1.5 IF men1=4 THEN nam$="1mover":move=1 GOTO mouse1 END IF IF men=6 THEN IF men1=1 THEN RUN "intro" END IF END IF PRINT "That was not a menu item! GOTO waitm RETURN mouse1: wt=move PAINT(1,1),1 COLOR 2,1 OPEN nam$ FOR INPUT AS 1 timer1: WINDOW 6,"time limit",(150,50)-(475,120),16 PALETTE 0, 0, 0, 0.7 PAINT(1,1),0 COLOR 1,0 timer2: PRINT " Choose the time period you want PRINT " for attempting a section of questions PRINT " (1)-Lightning -5 minutes PRINT " (2)-Skittles -15 minutes PRINT " (3)-Allegro -30 minutes PRINT " (4)-Tournament -90 minutes PRINT " (5)-Correspondence -300 minutes INPUT" A number(1-5)";tim IF tim=1 THEN min=5 IF tim=2 THEN min=15 IF tim=3 THEN min=30 IF tim=4 THEN min=90 IF tim=5 THEN min=300 IF tim<1 OR tim>5 THEN PRINT "Number must be between 1 and 5 tim=0:CLS GOTO timer2 END IF WINDOW CLOSE 6 x=min*60 TIMER ON ON TIMER(x) GOSUB rating IF tim1=1 THEN fin MENU OFF l1=40:l2=20:l3=240:l4=320 PALETTE 0, 0, 0.5, 0 GOTO drawpieces chessboard: WINDOW OUTPUT 2 CLS LINE (60,5)-(100,25),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l3,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l4,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l3,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l4,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l3,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l4,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(-l3,0)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(l1,-l2)-STEP(l1,l2),3,bf LINE STEP(0,0)-STEP(0,-160),1 LINE STEP(0,0)-STEP(-l4,0),1 LINE STEP(0,0)-STEP(0,160),1 LINE STEP(0,0)-STEP(l4,0),1 LINE STEP(225,5)-STEP(l4,160),2,b LINE STEP(100,5)-STEP(l4,160),3,bf GOTO newquestion drawpieces: CLS WINDOW 2,"Chessboard",(150,0)-(617,185),16 PAINT(1,1),0 WINDOW 3,"Text",(0,100)-(135,185),16 PAINT(1,1),1 COLOR 2,1 WINDOW 4,"Score",(0,0)-(135,85),16 PAINT(1,1),1 WINDOW OUTPUT 2 DIM king(87),queen(87),rook(87),bishop(87) DIM knight(87),pawn(87) DIM bking(87),bqueen(87),brook(87),bbishop(87) DIM bknight(87),bpawn(87) rook: AREA (5,5) AREA STEP(6,0) AREA STEP(0,5) AREA STEP(6,0) AREA STEP(0,-5) AREA STEP(6,0) AREA STEP(0,5) AREA STEP(6,0) AREA STEP(0,-5) AREA STEP(6,0) AREA STEP(0,10) AREA STEP(-30,0) AREA STEP(0,-10) AREAFILL PAINT STEP(10,5) GET (0,0)-(40,20),rook brook: LINE (430,0)-(470,20),3,bf AREA (435,5) AREA STEP(6,0) AREA STEP(0,5) AREA STEP(6,0) AREA STEP(0,-5) AREA STEP(6,0) AREA STEP(0,5) AREA STEP(6,0) AREA STEP(0,-5) AREA STEP(6,0) AREA STEP(0,10) AREA STEP(-30,0) AREA STEP(0,-10) AREAFILL PAINT STEP(10,5) GET (430,0)-(470,20),brook bishop: LINE (0,20)-(40,40),b LINE STEP(-20,-7.5)-STEP(15,5) LINE STEP(0,0)-STEP(-30,0) LINE STEP(0,0)-STEP(15,-5) LINE STEP(0,0)-STEP(-10,-5) LINE STEP(0,0)-STEP(10,-5) LINE STEP(0,0)-STEP(10,5) LINE STEP(0,0)-STEP(-10,5) PAINT STEP(0,-5) PAINT STEP(0,7) GET (0,20)-(40,40),bishop bbishop: LINE (430,20)-(470,40),3,bf LINE STEP(-20,-7.5)-STEP(15,5) LINE STEP(0,0)-STEP(-30,0) LINE STEP(0,0)-STEP(15,-5) LINE STEP(0,0)-STEP(-10,-5) LINE STEP(0,0)-STEP(10,-5) LINE STEP(0,0)-STEP(10,5) LINE STEP(0,0)-STEP(-10,5) PAINT STEP(0,-5) PAINT STEP(0,7) GET (430,20)-(470,40),bbishop queen: LINE(0,40)-(40,60),b LINE STEP(-10,-2.5)-STEP(-20,0) LINE STEP(0,0)-STEP(-5,-10) LINE STEP(0,0)-STEP(10,2.5) LINE STEP(0,0)-STEP(5,-7.5) LINE STEP(0,0)-STEP(5,7.5) LINE STEP(0,0)-STEP(10,-2.5) LINE STEP(0,0)-STEP(-5,10) PAINT STEP(-1,-1) GET (0,40)-(40,60),queen bqueen: LINE(430,40)-(470,60),3,bf LINE STEP(-10,-2.5)-STEP(-20,0) LINE STEP(0,0)-STEP(-5,-10) LINE STEP(0,0)-STEP(10,2.5) LINE STEP(0,0)-STEP(5,-7.5) LINE STEP(0,0)-STEP(5,7.5) LINE STEP(0,0)-STEP(10,-2.5) LINE STEP(0,0)-STEP(-5,10) PAINT STEP(-1,-1) GET (430,40)-(470,60),bqueen king: LINE (0,60)-(40,80),b LINE STEP(-10,-2.5)-STEP(-20,0) LINE STEP(0,0)-STEP(-5,-7.5) LINE STEP(0,0)-STEP(15,-5) LINE STEP(0,0)-STEP(15,5) LINE STEP(0,0)-STEP(-5,7.5) PAINT STEP(-10,-5) GET (0,60)-(40,80),king bking: LINE (430,60)-(470,80),3,bf LINE STEP(-10,-2.5)-STEP(-20,0) LINE STEP(0,0)-STEP(-5,-7.5) LINE STEP(0,0)-STEP(15,-5) LINE STEP(0,0)-STEP(15,5) LINE STEP(0,0)-STEP(-5,7.5) PAINT STEP(-10,-5) GET (430,60)-(470,80),bking knight: LINE (0,80)-(40,100),b AREA STEP(-5,-2.5) AREA STEP(-30,0) AREA STEP(15,-7.5) AREA STEP(-10,2.5) AREA STEP(-5,-5) AREA STEP(15,-5) AREAFILL PAINT STEP(0,5) GET (0,80)-(40,100),knight bknight: LINE (430,80)-(470,100),3,bf AREA STEP(-5,-2.5) AREA STEP(-30,0) AREA STEP(15,-7.5) AREA STEP(-10,2.5) AREA STEP(-5,-5) AREA STEP(15,-5) AREAFILL PAINT STEP(0,5) GET (430,80)-(470,100),bknight pawn: LINE (0,100)-(40,120),b CIRCLE STEP(-20,-12.5),10,1 LINE STEP(0,4)-STEP(15,5) LINE STEP(0,0)-STEP(-30,0) LINE STEP(0,0)-STEP(15,-4) PAINT STEP(0,-4) PAINT STEP(0,7) GET (0,100)-(40,120),pawn bpawn: LINE (430,100)-(470,120),3,bf CIRCLE STEP(-20,-12.5),10,1 LINE STEP(0,4)-STEP(15,5) LINE STEP(0,0)-STEP(-30,0) LINE STEP(0,0)-STEP(15,-4) PAINT STEP(0,-4) PAINT STEP(0,7) GET (430,100)-(470,120),bpawn GOTO chessboard newquestion: no=no+1 GOTO readposition nextmove: WINDOW OUTPUT 3 CLS PRINT "Question number PRINT no PRINT "What is your move PRINT IF colour$="1" THEN PRINT "White to move END IF IF colour$="2" THEN PRINT "Black to move END IF PRINT PRINT "(If you are stuck PRINT "double click on PRINT "the a1 square) IF ms=1 THEN usemouse INPUT move$ IF move$="x" THEN giveup IF move$=answer$ THEN GOSUB correct :ELSE GOSUB wrong CONTINUE: IF flag=1 THEN score=score IF flag=0 THEN score=score+1 flag=0 total=total+1 GOTO score usemouse: ON MOUSE GOSUB wait1 MOUSE ON wait1: IF MOUSE(0)>0 THEN readmouse GOTO wait1 readmouse: move=MOUSE(0) a=MOUSE(3) : b=MOUSE(4) x=(a-n1)/n2 y=(n3-b)/n1+1 y=INT(y): x=INT(x) wait2: IF MOUSE(0)>0 THEN read2 GOTO wait2 read2: move=MOUSE(0) a=MOUSE(3) : b=MOUSE(4) x2=(a-n1)/n2 y2=(n3-b)/n1+1 y2=INT(y2): x2=INT(x2) IF x=1 THEN v$="a" IF x=2 THEN v$="b" IF x=3 THEN v$="c" IF x=4 THEN v$="d" IF x=5 THEN v$="e" IF x=6 THEN v$="f" IF x=7 THEN v$="g" IF x=8 THEN v$="h" IF x2=1 THEN w$="a" IF x2=2 THEN w$="b" IF x2=3 THEN w$="c" IF x2=4 THEN w$="d" IF x2=5 THEN w$="e" IF x2=6 THEN w$="f" IF x2=7 THEN w$="g" IF x2=8 THEN w$="h" PRINT " ";v$;y;"-";w$;y2 IF x=1 AND y=1 AND x2=1 AND y2=1 THEN giveup IF x=f1 AND y=r1 AND x2=f2 AND y2=r2 THEN correct :ELSE wrong wrong: PRINT "Try again! flag=1 IF ms=1 THEN usemouse PRINT "Press Spacebar PRINT "to continue INPUT a$ GOTO nextmove giveup: score=score total=total+1 flag=0 GOTO score correct: PRINT " Correct! IF ms=1 THEN CONTINUE PRINT "Press Spacebar PRINT "to continue INPUT a$ RETURN score: WINDOW OUTPUT 4 CLS PAINT(1,1),1 COLOR 2,1 PRINT PRINT " Your score is PRINT PRINT " ";score PRINT PRINT " From a possible PRINT PRINT " ";total IF ms=1 THEN chessboard INPUT "Press spacebar";a$ GOTO chessboard readposition: WINDOW OUTPUT 2 IF EOF(1)=-1 THEN fin INPUT#1,answer$ INPUT#1,position$ IF EOF(1)=-1 THEN fin d=LEN(position$) space=space+d limit=2136 IF space > limit THEN fin f1$=MID$(answer$,1,1) r1$=MID$(answer$,2,1) f2$=MID$(answer$,3,1) r2$=MID$(answer$,4,1) colour$=MID$(answer$,5,1) IF f1$="a" THEN f1=1 IF f1$="b" THEN f1=2 IF f1$="c" THEN f1=3 IF f1$="d" THEN f1=4 IF f1$="e" THEN f1=5 IF f1$="f" THEN f1=6 IF f1$="g" THEN f1=7 IF f1$="h" THEN f1=8 IF f2$="a" THEN f2=1 IF f2$="b" THEN f2=2 IF f2$="c" THEN f2=3 IF f2$="d" THEN f2=4 IF f2$="e" THEN f2=5 IF f2$="f" THEN f2=6 IF f2$="g" THEN f2=7 IF f2$="h" THEN f2=8 r1=VAL(r1$) r2=VAL(r2$) b=LEN(position$) FOR a=1 TO b STEP 4 side$=MID$(position$,a,1) piece$=MID$(position$,a+1,1) file$=MID$(position$,a+2,1) rank$=MID$(position$,a+3,1) p=VAL(piece$) IF p=0 THEN nextmove file=VAL(file$) rank=VAL(rank$) x=n1+n2*file y=n3-n1*rank z=rank+file IF z/2=INT(z/2) THEN z=0 IF NOT z/2=INT(z/2) THEN z=1 IF side$="1" THEN IF z=0 THEN IF p=1 THEN PUT(x,y),king,PSET IF p=2 THEN PUT(x,y),queen,PSET IF p=3 THEN PUT(x,y),rook,PSET IF p=4 THEN PUT(x,y),bishop,PSET IF p=5 THEN PUT(x,y),knight,PSET IF p=6 THEN PUT(x,y),pawn,PSET END IF IF z=1 THEN IF p=1 THEN PUT(x,y),bking,PSET IF p=2 THEN PUT(x,y),bqueen,PSET IF p=3 THEN PUT(x,y),brook,PSET IF p=4 THEN PUT(x,y),bbishop,PSET IF p=5 THEN PUT(x,y),bknight,PSET IF p=6 THEN PUT(x,y),bpawn,PSET END IF END IF IF side$="2" THEN IF z=0 THEN IF p=1 THEN PUT(x,y),bking,PRESET IF p=2 THEN PUT(x,y),bqueen,PRESET IF p=3 THEN PUT(x,y),brook,PRESET IF p=4 THEN PUT(x,y),bbishop,PRESET IF p=5 THEN PUT(x,y),bknight,PRESET IF p=6 THEN PUT(x,y),bpawn,PRESET END IF IF z=1 THEN IF p=1 THEN PUT(x,y),king,PRESET IF p=2 THEN PUT(x,y),queen,PRESET IF p=3 THEN PUT(x,y),rook,PRESET IF p=4 THEN PUT(x,y),bishop,PRESET IF p=5 THEN PUT(x,y),knight,PRESET IF p=6 THEN PUT(x,y),pawn,PRESET END IF END IF NEXT LINE(60,5)-(380,5) LINE(380,5)-(380,165) LINE(60,5)-(60,165) LINE(60,165)-(380,165) GOTO nextmove rating: PRINT "Your time PRINT "has run out! PRINT score1: CLS WINDOW OUTPUT 4 score=INT((score/min)*15*wt) no=INT((no/min)*15*wt) PRINT "Your score was PRINT " ";score PRINT "out of an PRINT "attempted ";no PRINT PRINT "CLICK PRINT "TO PRINT "CONTINUE PRINT GOTO record RETURN wclose: SYSTEM GOTO fin2 RETURN fin: CLOSE 1 WINDOW OUTPUT 4 CLS PAINT(1,1),1 COLOR 2,1 PRINT "You have PRINT "answered all the PRINT "questions GOTO score1 record: PRINT "Record name in INPUT"hall of fame";a$ IF a$="n" THEN fin1 IF a$="y" THEN record1 PRINT "Answer with y or n GOTO record record1: DIM ts(20),n$(20) IF nam$="checkmate1" THEN sect=1 IF nam$="mate2a" THEN sect=2 IF nam$="mate2b" THEN sect=3 IF nam$="mate3a" THEN sect=4 IF nam$="mate3b" THEN sect=5 IF nam$="unstop2" THEN sect=6 IF nam$="unstop3" THEN sect=7 IF nam$="winmaterial2" THEN sect=8 IF nam$="hennig" THEN sect=9 IF nam$="winmaterial3a" THEN sect=10 IF nam$="winmaterial3b" THEN sect=11 IF nam$="queening2" THEN sect=12 IF nam$="queening3" THEN sect=13 IF nam$="4movera" THEN sect=14 IF nam$="4moverb" THEN sect=15 IF nam$="draw" THEN sect=16 IF nam$="1mover" THEN sect=17 fame: CLOSE OPEN "hall" FOR INPUT AS 1 readhall: FOR x=1 TO 17 INPUT#1,ts(x) INPUT#1,n$(x) NEXT CLOSE onehall: IF score>ts(sect) THEN INPUT"Your name";na$ n$(sect)=na$ ts(sect)=score OPEN "hall" FOR OUTPUT AS 1 FOR x=1 TO 17 PRINT #1,ts(x) PRINT #1,n$(x) NEXT CLOSE 1 END IF WINDOW 5,"fame",(150,20)-(450,180),16 PALETTE 3, 0.7,0.7, 0 PAINT(1,1),3 COLOR 2,3 PRINT PRINT " HALL OF FAME PRINT " checkmate1 ";ts(1);n$(1) PRINT " checkmate2a ";ts(2);n$(2) PRINT " checkmate2b ";ts(3);n$(3) PRINT " checkmate3a ";ts(4);n$(4) PRINT " checkmate3b ";ts(5);n$(5) PRINT " unstop2 ";ts(6);n$(6) PRINT " unstop3 ";ts(7);n$(7) PRINT " winmaterial2a";ts(8);n$(8) PRINT " winmaterial2b";ts(9);n$(9) PRINT " winmaterial3a";ts(10);n$(10) PRINT " winmaterial3b";ts(11);n$(11) PRINT " queening2 ";ts(12);n$(12) PRINT " queening3 ";ts(13);n$(13) PRINT " mate4a ";ts(14);n$(14) PRINT " mate4b ";ts(15);n$(15) PRINT " draw ";ts(16);n$(16) PRINT " 1mover ";ts(17);n$(17) INPUT"Return key";a$ GOTO fin1 fin1: RUN "chesstutor" break1: RETURN fin2: SYSTEM